【IICS】マッピングのパラメータに現在日付を指定する方法

【IICS】マッピングのパラメータに現在日付を指定する方法

Clock Icon2023.06.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

データアナリティクス事業本部ビッグデータチームのyosh-kです。
前回、IICS CDIのマッピング作成時にソースタイプにクエリを選択し、クエリの中でパラメータを使用できないか検討しましたが、今回は、そのパラメータに現在日付を設定していきたいと思います。

IICS CDI Mappingでクエリ選択時にパラメータを使用する方法

前提条件

  • 設定は前回のブログと同様ですので、割愛させていただきます。
  • Redshift tableには、現在の日付を指定するため、flight_dateカラムがブログ執筆日付の2023-06-03のレコードを用意します。
INSERT INTO public.flightdata(
select 
    '2023-06-03',
    flight_number,
    origin_city,
    origin_state,
    destination_city,
    destination_state,
    departure_delay,
    arrival_delay,
    cancelled,
    diverted,
    air_time,
    distance,
    distance_group,
    carrier_delay,
    weather_delay,
    security_delay,
    late_aircraft_delay,
    origin_airport_name,
    cancellation_reason,
    destination_airport_name,
    carrier_name

from public.flightdata
limit 10
)

結論

結論から言いますと、データタスクの入力フィールドに、該当のパラメータを指定し、式の中で以下の設定をすることで、JSTの現在日付を取得することが可能です。

fn:substring(fn:string(fn:adjust-dateTime-to-timezone(fn:current-dateTime(), xs:dayTimeDuration("PT9H")))
, 1, 10)

設定内容の確認

設定内容の確認のため、テスト用のパラメータをマッピングから作成し、割り当てステップで出力を確認していきます。

fn:current-dateTime

公式的なIICSのドキュメントは見つけることはできませんでしたが、IICS Knowledgeから現在の日付と時刻を、サーバーの暗黙的なタイムゾーンで返していると想定しています。

マッピング実行結果のペイロードからも日本時間2023-06-03T18:55から-9時間されたUTC時間2023-06-03T09:55:18.003Zであることを確認しています。

fn:adjust-dateTime-to-timezone

fn:adjust-dateTime-to-timezone(arg, timezone)については、こちらも公式ドキュメントを見つけられませんでしたが、IICS Knowledgeから読み解くと、argにdatetime型の値を指定し、timezonexs:dayTimeDuration型の値を指定することで、与えられた日時を指定されたタイムゾーンに変換するために使用されます。xs:dayTimeDurationは、XML Schemaで定義されたデータ型の1つです。これは、期間を表現するために使用されます。具体的には、時間、分、秒を表す値を持ちます。

xs:dayTimeDurationは、以下の形式で表現されます:

PnDTnHnMnS

ここで、nは数値を表し、以下の要素が含まれます:

P: 期間を示すことを示すプレフィックス
D: 日数
T: 時間を示すことを示すセパレータ
H: 時間
M: 分
S: 秒

例えば、PT5H30Mは、5時間30分の期間を表し、UTCはPT0H、JSTはPT9Hとなります。


想定通り、日本時間のcurrent_timeが出力されています。

fn:stringとfn:substring

fn:stringfn:substringについても公式な記載は見つけられませんでしたが、以下の認識でいます。

  • fn:string(arg): argをstring型に変換
  • fn:substring(sourceString, startingLoc, length):sourceStringで検索したい文字列を、startingLocで開始位置を、lengthで開始位置からの数を指定し、値を抽出

  • SUBSTR

今回の用途として、これまでに取得した、datetime型の値をstringに変換し、その中から日付箇所だけを抽出するため、以下の設定とします。


想定通り、JSTの日付型で取得できています。

実行結果

最後にデータタスクの入力パラメータに、作成した式を入力し、ジョブを実行してみます。

date_paramsが現在日付の2023-06-03"となり出力されています。レコード件数も10件なので想定通りです。 CSVファイルの出力も確認

最後に

fn:current-dateTimeの値はおそらく、サーバー上の時間だと思いますので、もしサーバー上の時間がJSTである場合は、fn:adjust-dateTime-to-timezone処理は不要であると思います。このブログが少しでも誰かの役に立てば幸いです。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.